// Author: Domien Nowicki

#ifndef PLAYER_H
#define PLAYER_H

#include "Map.h"
#include "Color.h"
#include "Move.h"
#include "Properties.h"
#include "MapSolver.h"
class Game;

class Player
{
public:

	// Constructors
	Player(Game *game, Map* map, const Properties& newProperties);
	Player(const Player& rhs);

	// Destructor
	virtual ~Player();



	// Set current selected color of the player
	void SetColor(Color newColor);

	// Get/Set player propeties
	void SetHuman(bool state);
	int GetStepCount() const;
	bool IsHuman() const;
	Map* GetMap() const;

	// Move operations
	virtual bool GetMove(Move *move);
	void GetHintMove(Move *move);

	// Increase the steps this player has done
	void StepIncrease();

	void RestrictMapSolver(int colorCount);

protected:
	// Do a move to the map that was assigned to this player
	void DoMove(const Move& move);

	Map* map;
	Color color;
private:
	bool human;
	int steps;
	Properties properties;

	Game* game;
	MapSolver* mapSolver;

};

#endif //PLAYER_H